package com.rui.factory.method.main;

import com.rui.factory.method.model.AmericanoFactory;
import com.rui.factory.method.model.CappuccinoFactory;
import com.rui.factory.method.model.MochaFactory;
import com.rui.factory.obj.Coffee;

/**
 * 工厂方法模式
 *
 * <p>
 * 适用场景：
 * 创建对象需要大量的重复代码。
 * 客户端（应用层）不依赖于产品类实例如何被创建和实现等细节。
 * 一个类通过其子类来指定创建哪个对象。
 * <p>
 * 优点：
 * 用户只需要关系所需产品对应的工厂，无须关心创建细节。
 * 加入新产品符合开闭原则，提高了系统的可扩展性。
 * <p>
 * 缺点：
 * 类的数量容易过多，增加了代码结构的复杂度。
 * 增加了系统的抽象性和理解难度。
 *
 * @author ZhangRui
 * @date 2023/03/02 13:26
 **/
public class MethodFactoryMain {

    public static void main(String[] args) {

        Coffee cappuccinoCoffee = new CappuccinoFactory().create();
        cappuccinoCoffee.taste();

        new AmericanoFactory().create().taste();

        new MochaFactory().create().taste();

    }

}
